//
//  ViewController.swift
//  TableView的使用
//
//  Created by ios on 16/8/8.
//  Copyright © 2016年 ios. All rights reserved.
//

import UIKit

class ViewController: UITableViewController {
    //存储数据
    var personList: [Person]?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //把网络加载的数据通过闭包参数赋值给personList
        let closure = {(result: [Person])->() in
        self.personList = result
        self.tableView.reloadData()
        }
       
        loadData(closure)
 
}
    //点击cell调用的方法
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        
        //  获取目标控制器
        guard let destinationViewController = segue.destinationViewController as? detailViewController else {
          return
        }
         //  获取点击的indexPath
        guard let selectedIndexPath = tableView.indexPathForSelectedRow else{
         return
        }
        
        //  代码执行到此 目标控制器 与 点击的indexPath都不为nil
        destinationViewController.person = personList![selectedIndexPath.row]
        //执行闭包刷新数据
        destinationViewController.callBack = {
         //  重写刷新数据
            self.tableView.reloadData()
        }
    }
}

//  extension 表示扩展,好比oc里面分类
//  加载网络数据
extension ViewController {
    func loadData(callBack:(result : [Person])->()){
        dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
            
            //创建数组
            var testArry: [Person] = [Person]()
            for i in 0..<20 {
            let name  = "大黄狗\(i)"
            let age = 15 + (random() % 16)
            let person = Person(dict: ["name": name,"age": age])
            testArry.append(person)
            }
            
            //回到主线程
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                
            callBack(result: testArry)
                
            })
            
        }
        
    }
    
}

//  数据源代理方法
extension ViewController {
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return personList?.count ?? 0
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView .dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! PersonTableViewCell
        cell.person = personList?[indexPath.row]
        
        return cell
    }
}













